#include "wdgt_drv.h"

#if USE_FWDGT

/**
 * @desc  : 独立看门狗配置
 * @date  : 2025-02-21
 * @author: AnRui
 * @note  :
 */
void FWDGT_config(void) {
    rcu_osci_on(RCU_IRC40K);
    // 等待配置成功
    while (SUCCESS != rcu_osci_stab_wait(RCU_IRC40K)) {}
    fwdgt_config(FWDGT_COUNTER, FWDGT_PRESCALER);
    fwdgt_enable();
}

/**
 * @desc  : 独立看门狗喂狗
 * @date  : 2025-02-21
 * @author: AnRui
 * @note  :
 */
void FWDGT_feed(void) {
    fwdgt_counter_reload();
}
#endif

#if USE_WWDGT

/**
 * @desc  : 窗口看门狗配置
 * @date  : 2025-02-21
 * @author: AnRui
 * @note  : counter： 计数器的初始器 0x00 - 0x7F  Max: 127
            window:   窗口值         0x00 - 0x7F  Max: 127
            prescaler:分频系数
                PCLK1 = 60MHz
                counter = (PCLK1/4096)/4  每秒计数次数Hz
                counter = 3662Hz
            -------------------------------------------------------------------
            求窗口的时间范围：
            1/4分频系数： 1次计数耗时 = 1000ms / 3662Hz = 0.273us
            窗口开始时间-> (counter - window) * 1次计数耗时 = (127 - 120) * 0.273us = 1.99ms
            窗口结束时间-> (counter - 	 0x3F) * 1次计数耗时 = (127 - 63) * 0.273us = 17.472ms
            需要在窗口时间内喂狗, 否则会触发重启
            1.99ms < duration < 17.472ms
 */
void WWDGT_config(void) {
    // 窗口看门狗
    // 1. 开启rcu
    rcu_periph_clock_enable(RCU_WWDGT);
    // 2. 配置wwdgt
    wwdgt_deinit();
    wwdgt_config(WWDGT_COUNTER, WWDGT_WINDOW, WWDGT_PRESCALER);
    wwdgt_enable();
}

/**
 * @desc  : 窗口看门狗 喂狗
 * @date  : 2025-02-21
 * @author: AnRui
 * @note  :
 */
void WWDGT_feed(void) {
    wwdgt_counter_update(WWDGT_COUNTER);
}
#endif
